package com.szml.user.result;


import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;

import java.io.Serializable;

/**
 * @Author limin
 * @date 2025-06-18 11:31
 * @description
 */
@Data
@AllArgsConstructor
@NoArgsConstructor
public class Result<T> implements Serializable {
    private Integer code; //响应码
    private String message; //响应信息
    private T data; //响应数据

    /**
     * 成功响应，但无数据
     * @return
     * @param <T>
     */
    public static <T> Result<T> success(){
        return new Result<>(200,"操作成功",null);
    }

    /**
     * 响应成功，并且有数据
     * @param data
     * @return
     * @param <T>
     */
    public static <T> Result<T> success(T data){
        return new Result<>(200,"操作成功",data);
    }

    /**
     * 响应成功，并且可以传自定义的消息
     * @param message
     * @param data
     * @return
     * @param <T>
     */
    public static <T> Result<T> success(String message, T data){
        return new Result<>(200,message,data);
    }

    /**
     * 响应失败，自定义错误码和消息
     * @param code
     * @param message
     * @return
     * @param <T>
     */
    public static <T> Result<T> error(Integer code,String message){
        return new Result<>(code,message,null);
    }
    /**
     * 响应失败，使用ErrorCode错误码枚举
     * @param errorCode
     * @return
     * @param <T>
     */
    public static <T> Result<T> error(ErrorCode errorCode){
        return new Result<>(errorCode.getCode(),errorCode.getMessage(),null);
    }

    /**
     * 响应失败，使用ErrorCode错误码枚举，自定义的消息
     * @param errorCode
     * @param message
     * @return
     * @param <T>
     */
    public static <T> Result<T> error(ErrorCode errorCode, String message){
        return new Result<>(errorCode.getCode(),message,null);
    }

    //判断结果是否成功
    public  boolean isSuccess(){
        return code != null && code == 200;
    }
}
